package com.andon.springboot.seed;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import org.junit.Test;

/**
 * @author: baiwenlong
 * created on: 2018/11/11 8:38 PM
 * description: 自动生成代码
 */
public class MyBatisGeneratorCode {


    @Test
    public void testMbg() {
        // 1.全局配置
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setActiveRecord(true)// 是否开启AR模式
                .setAuthor("BWL") // 指定作者
                .setOutputDir("/Users/baiwenlong/IdeaWorkSpace/Auth/src/main/java")
                .setFileOverride(true) // 指定文件覆盖
                .setIdType(IdType.ID_WORKER) // 设置主键自增策略
                .setServiceImplName("%sService") // 设置生成的services接口的名字的首字母是否为I
                .setBaseResultMap(true) // 基本的字段映射
                .setBaseColumnList(true)// 基本的sql片段
                .setFileOverride(true)//是否覆盖文件
                .setActiveRecord(false)//是否 ActiveRecord 模式
                .setSwagger2(true)//开启 swagger2 模式
                .setEntityName("%sEntity");
        // 2.配置数据源
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDbType(DbType.MYSQL) // 设置数据库类型
                .setDriverName("com.mysql.jdbc.Driver")
                .setUrl("jdbc:mysql://localhost:3306/auth?useUnicode=true&characterEncoding=utf8&useSSL=false")
                .setUsername("root")
                .setPassword("123456");
        // 3.策略配置
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setCapitalMode(true) //全局大写命名
                .setEntityLombokModel(true)//是否为lombok模型
                .setNaming(NamingStrategy.underline_to_camel) // 数据库字段下划线转驼峰命令策略
                .setTablePrefix("tbl_") // 设置表前缀
                .setInclude("sys_acl", "sys_acl_module", "sys_dept", "sys_log",
                        "sys_role", "sys_role_acl", "sys_role_user", "sys_user")// 设置需要生成的表
                .entityTableFieldAnnotationEnable(true)//是否生成实体时，生成字段注解
                .setEntityColumnConstant(true);//是否生成字段常量
        // 4.包名策略配置
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.andon.auth") // 设置父包
                .setMapper("dao")
                .setService("service")
                .setController("controller")
                .setEntity("entity")
                .setXml("mapper");
        // 5. 开始生成代码
        AutoGenerator autoGenerator = new AutoGenerator();
        autoGenerator.setGlobalConfig(globalConfig)
                .setDataSource(dataSourceConfig)
                .setStrategy(strategyConfig)
                .setPackageInfo(packageConfig);
        autoGenerator.execute();
    }

}
